package org.zecontech.extraplus.util;

import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.Block;
import org.zecontech.extraplus.ExtraPlus;

/**
 * 帮助者工具类
 */
public class Helpers {

    /**
     * 创建资源键
     * @param type 类型
     * @param name 名字ID
     * @return 资源键
     * @param <T> 继承自注册的内容
     */
    public static <T> ResourceKey<T> createKey(ResourceKey<? extends Registry<T>> type, String name) {
        return ResourceKey.create(type, Helpers.identifier(name));
    }

    /**
     * 创建资源键
     * @param type  类型
     * @param resLoc 资源路径
     * @return 资源键
     * @param <T> 继承自注册的内容
     */
    public static <T> ResourceKey<T> createKey(ResourceKey<? extends Registry<T>> type, ResourceLocation resLoc) {
        return ResourceKey.create(type, resLoc);
    }

    /**
     * 新建模组ID下的资源路径
     * @param name 具体ID
     * @return 资源路径
     */
    public static ResourceLocation identifier(String name) {
        return ResourceLocation.fromNamespaceAndPath(ExtraPlus.MOD_ID, name);
    }

    /**
     * 获取方块名字
     * @param block 方块实例
     * @return 方块名字
     */
    public static String getBlockName(Block block) {
        return BuiltInRegistries.BLOCK.getKey(block).getPath();
    }

    /**
     * 获取物品名字
     * @param itemLike 物品
     * @return 物品名字
     */
    public static String getItemName(ItemLike itemLike) {
        return BuiltInRegistries.ITEM.getKey(itemLike.asItem()).getPath();
    }

    /**
     * 获取实体名字
     * @param entityType 实体类型
     * @return 实体名字
     */
    public static String getEntityName(EntityType<?> entityType) {
        return BuiltInRegistries.ENTITY_TYPE.getKey(entityType).getPath();
    }
}
